package com.topscomm.meet.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.tencentcloudapi.wemeet.client.CorpClient;
import com.tencentcloudapi.wemeet.client.MeetingClient;
import com.tencentcloudapi.wemeet.client.UserClient;
import com.tencentcloudapi.wemeet.common.RequestSender;
import com.tencentcloudapi.wemeet.common.profile.HttpProfile;
import com.tencentcloudapi.wemeet.models.corp.QueryCorpOnlineMeetingsRequest;
import com.topscomm.tap.common.ParameterCache;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;


@Slf4j
@Setter
public class TencentMeetUtil {
    private boolean debugLog;

    private boolean enabled;
    /**
     * 腾讯会议企业id
     */
    private  String AppId;
    /**
     * 应用id
     */
    private  String SdkId;
    /**
     * Secret Id
     */
    private  String SecretId;
    /**
     * Secret key
     */
    private  String SecretKey;
    /**
     * Secret key
     */
    private  String Host;


    // 初始化全局client
    /**
     * 初始化全局会议client
     */
    public static MeetingClient MEETING_CLIENT;
    /**
     * 初始化全局用户client
     */


    public static UserClient USER_CLIENT;
    @Autowired
    private ApplicationContext ctx;
    private static final Gson GSON = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

    public TencentMeetUtil() {
    }
    public void init(){
        if(!this.enabled){
            return;
        }
        log.info("------------------腾讯会议SDK初始化--------------------");
        this.AppId = ParameterCache.getValue("TencentMeet_AppId");
        this.SdkId = ParameterCache.getValue("TencentMeet_SdkId");
        this.SecretId = ParameterCache.getValue("TencentMeet_SecretId");
        this.SecretKey = ParameterCache.getValue("TencentMeet_SecretKey");
        this.Host = ParameterCache.getValue("TencentMeet_Host");
        HttpProfile profile = new HttpProfile();
        // 腾讯会议分配给三方开发应用的 App ID。企业管理员可以登录 腾讯会议官网，单击右上角【用户中心】
        // 在左侧菜单栏中的【企业管理】>【高级】>【restApi】中进行查看。
        profile.setAppId(AppId);
        // 用户子账号或开发的应用 ID，企业管理员可以登录 腾讯会议官网，单击右上角【用户中心】
        // 在左侧菜单栏中的【企业管理】>【高级】>【restApi】中进行查看（如存在 SdkId 则必须填写，早期申请 API 且未分配 SdkId 的客户可不填写）。
        profile.setSdkId(SdkId);
        // 请求域名
        profile.setHost(Host);
        // 申请的安全凭证密钥对中的 SecretId，传入请求header，对应X-TC-Key
        profile.setSecretId(SecretId);
        // 申请的安全凭证密钥对中的 Secretkey，用户签名计算
        profile.setSecretKey(SecretKey);
        // 是否开启请求日志，开启后会打印请求和返回的详细日志
        profile.setDebug(debugLog);
        // 设置请求超时时间，单位s
        profile.setReadTimeout(3);
        // 设置获取连接超时时间，单位s
        profile.setConnTimeout(1);

        // 初始化全局sender，也可以方法级别实例化
        RequestSender sender = new RequestSender(profile);
        // 实例化client
        MEETING_CLIENT = new MeetingClient(sender);
        USER_CLIENT = new UserClient(sender);

        log.info("------------------腾讯会议SDK检测--------------------");
        try {
            CorpClient corpClient = new CorpClient(sender);
            QueryCorpOnlineMeetingsRequest request = new QueryCorpOnlineMeetingsRequest();
            request.setMeetingState(1);
            request.setPage(1);
            request.setPageSize(10);
            corpClient.queryOnlineMeetings(request);
        }catch (Exception e){
            log.warn("!!!!!!!!!!!!!!!!!!!!!!!无法成功连接到腾讯会议，请检查系统参数配置!!!!!!!!!!!!!!!!!!。");
            ((ConfigurableApplicationContext) ctx).close();
            System.exit(1);
        }
        log.info("-----------------腾讯会议SDK完成初始化--------------------");
    }
}

